﻿#VisualFreeBasic_Form#  Version=5.9.1
Locked=0

[Form]
Name=Form2
ClassStyle=CS_VREDRAW,CS_HREDRAW,CS_DBLCLKS
ClassName=
WinStyle=WS_CAPTION,WS_SYSMENU,WS_CLIPSIBLINGS,WS_CLIPCHILDREN,WS_VISIBLE,WS_EX_WINDOWEDGE,WS_EX_CONTROLPARENT,WS_EX_LEFT,WS_EX_LTRREADING,WS_EX_RIGHTSCROLLBAR,WS_POPUP
Style=3 - 常规窗口
Icon=
Caption=翻译进度
StartPosition=2 - 父窗口中心
WindowState=0 - 正常
Enabled=True
Repeat=False
Left=0
Top=0
Width=561
Height=119
TopMost=False
Child=False
MdiChild=False
TitleBar=True
SizeBox=False
SysMenu=True
MaximizeBox=False
MinimizeBox=False
Help=False
Hscroll=False
Vscroll=False
MinWidth=0
MinHeight=0
MaxWidth=0
MaxHeight=0
NoActivate=False
MousePass=False
TransPer=0
TransColor=SYS,25
Shadow=0 - 无阴影
BackColor=SYS,15
MousePointer=0 - 默认
Tag=
Tab=True
ToolTip=
ToolTipBalloon=False
AcceptFiles=False

[ProgressBar]
Name=Progress1
Index=-1
Style=0 - 水平控件
Marquee=False
Speed=10
Smooth=False
Max=100
Min=1
Value=30
Enabled=True
Visible=True
Left=5
Top=30
Width=545
Height=25
Layout=0 - 不锚定
MousePointer=0 - 默认
Tag=
ToolTip=
ToolTipBalloon=False
AcceptFiles=False

[Timer]
Name=Timer1
Index=-1
Interval=100
Enabled=True
Left=20
Top=260
Tag=

[Label]
Name=Label1
Index=-1
Style=0 - 无边框
Caption=翻译第1行
Enabled=True
Visible=True
ForeColor=SYS,8
BackColor=SYS,25
Font=微软雅黑,9,0
FontWidth=0
FontAngle=0
TextAlign=0 - 左对齐
Prefix=True
Ellipsis=False
Left=10
Top=5
Width=495
Height=20
Layout=0 - 不锚定
MousePointer=0 - 默认
Tag=
ToolTip=
ToolTipBalloon=False

[Button]
Name=Command1
Index=-1
Caption=退出翻译
TextAlign=1 - 居中
Ico=
Enabled=True
Visible=True
Default=False
OwnDraw=False
MultiLine=False
Font=微软雅黑,9,0
Left=485
Top=60
Width=65
Height=25
Layout=0 - 不锚定
MousePointer=0 - 默认
Tag=
Tab=True
ToolTip=
ToolTipBalloon=False


[AllCode]
Type 翻译列表类
   ci As Long 
   C代码 As String 
   bi As Long 
   B代码 As String 
end type 
Dim Shared 代码处理i As Long ,代码处理u As Long ,代码处理t As ULong
Dim Shared 翻译列表() As 翻译列表类 ,翻译主要 As Long 
'[Form2.Command1]事件 : 单击
'hWndForm    当前窗口的句柄(WIN系统用来识别窗口的一个编号，如果多开本窗口，必须 Me.hWndForm = hWndForm 后才可以执行后续操作本窗口的代码)
'hWndControl 当前控件的句柄(也是窗口句柄，如果多开本窗口，必须 Me.控件名.hWndForm = hWndForm 后才可以执行后续操作本控件的代码 )
Sub Form2_Command1_BN_Clicked(hWndForm As hWnd, hWndControl As hWnd)

   Me.Close 

End Sub

'[Form2]事件 : 窗口完全显示后。
'hWndForm  当前窗口的句柄(WIN系统用来识别窗口的一个编号，如果多开本窗口，必须 Me.hWndForm = hWndForm 后才可以执行后续操作本窗口的代码)
'UserData  来自显示窗口最后1个参数，例： Form2.Show(父窗口句柄,模式,UserData)
Sub Form2_Shown(hWndForm As hWnd, UserData As Integer)
   Form1.Command1.Enabled = False 
   Form1.Command2.Enabled = False 
   Erase 翻译列表 
   Form2_Timer1_WM_Timer(0, 0)
   
End Sub

'[Form2]事件 : 即将关闭窗口，返回非0可阻止关闭
'hWndForm  当前窗口的句柄(WIN系统用来识别窗口的一个编号，如果多开本窗口，必须 Me.hWndForm = hWndForm 后才可以执行后续操作本窗口的代码)
Function Form2_WM_Close(hWndForm As hWnd) As LResult
   退出翻译 = 1
   Form1.Command1.Enabled = True 
   Form1.Command2.Enabled = True 

   Function = FALSE ' 返回 TRUE 阻止关闭窗口。
End Function

'[Form2.ListView1]事件 : 有个项目已经被改变
'hWndForm    当前窗口的句柄(WIN系统用来识别窗口的一个编号，如果多开本窗口，必须 Me.hWndForm = hWndForm 后才可以执行后续操作本窗口的代码)
'hWndControl 当前控件的句柄(也是窗口句柄，如果多开本窗口，必须 Me.控件名.hWndForm = hWndForm 后才可以执行后续操作本控件的代码 )
'pNMV.iItem  当前被更改的项目索引，但为-1时，则更改已应用于列表视图中的所有项目 
'注意：每次点击会发生3次事件，代码新增、修改状态也会发生事件，一般用 pNMV.uNewState = 3 来判断是用户点击后发生的事件。
Sub Form2_ListView1_LVN_ItemChanged(hWndForm As hWnd, hWndControl As hWnd, pNMV As NM_LISTVIEW)
   If pNMV.uNewState <> 3 Then Return '非用户点击和去除一次点击多次事件，可根据实际情况相应修改。
   Dim i As Long = pNMV.iItem
   If i < 0 Or i > UBound(翻译列表) Then Return 
   'Text1.Text = ListView1.GetItemText(pNMV.iItem, 1) 
   Form1.Scintilla1.SendMessage(SCI_SETXOFFSET ,0,0)
   Form1.Scintilla1.SendMessage(SCI_SETSEL ,翻译列表(i).ci-1  ,翻译列表(i).ci  + Len(翻译列表(i).C代码) )
   Form1.Scintilla2.SendMessage(SCI_SETXOFFSET ,0,0)
   Form1.Scintilla2.SendMessage(SCI_SETSEL ,翻译列表(i).bi-1  ,翻译列表(i).bi  + Len(翻译列表(i).b代码) )
End Sub

'[Form2.Timer1]事件 : 定时器
'hWndForm  当前窗口的句柄(WIN系统用来识别窗口的一个编号，如果多开本窗口，必须 Me.hWndForm = hWndForm 后才可以执行后续操作本窗口的代码)
''         本控件为功能控件，就是无窗口，无显示，只有功能。如果多开本窗口，必须 Me.控件名.hWndForm = hWndForm 后才可以执行后续操作本控件的代码 
'wTimerID  定时器ID，区分不同定时器的编号
Sub Form2_Timer1_WM_Timer(hWndForm As hWnd, wTimerID As Long)
   Dim ss As String
   If 代码处理u Then
      ss = "，已完成：" & Format(Int((代码处理i / 代码处理u) * 10000) / 100, "0.00") & "%，花费时间：" & Format(Int((GetTickCount - 代码处理t) / 100) / 10, "0.0") & "秒"
      Progress1.Value = Int((代码处理i / 代码处理u) * 100) 
   End If
   Dim nLine As Long = Form1.Scintilla1.SendMessage(SCI_LINEFROMPOSITION, 代码处理i, 0) + 1 '目标行
   Label1.Caption = "处理第" & nLine & "行代码" & ss
   
   
End Sub

Sub 新增翻译列表(处理函数 As String , ci As Long, C代码 As String, bi As Long, B代码 As String)
   If 翻译主要 <>1 Then Return '只记录主要的翻译
   If Trim(C代码, Any Chr(32, 10, 13)) = "" Then Return
   Dim cLine As Long = Form1.Scintilla1.SendMessage(SCI_LINEFROMPOSITION, ci, 0) + 1 '目标行
   Dim bLine As Long = Form1.Scintilla2.SendMessage(SCI_LINEFROMPOSITION, bi, 0) + 1 '目标行
   Dim h As Long = Form1.ListView1.ItemCount + 1
   Dim i As Long = UBound(翻译列表) + 1
   Dim j     As Long = Form1.ListView1.AddItem(WStr(h),i )
   Form1.ListView1.SetItemText(j, 1,处理函数)
   ReDim Preserve 翻译列表(i)
   Dim ss As String = LTrim(B代码, Any Chr(32, 10, 13))
   翻译列表(i).bi = bi + (Len(B代码) - Len(ss))
   ss = RTrim(ss, Any Chr(32, 10, 13))
   翻译列表(i).B代码 = ss
   'Form2.ListView1.SetItemText(j, 2,bLine & ")" & UTF8toCWSTR(ss))
   ss = LTrim(C代码, Any Chr(32, 10, 13))
   翻译列表(i).ci = ci + (Len(C代码) - Len(ss))
   ss = RTrim(ss, Any Chr(32, 10, 13))
   翻译列表(i).C代码 = ss
   'Form2.ListView1.SetItemText(j, 1,cLine & ")" &  UTF8toCWSTR(ss))
End Sub









